package com.xlh.service.system;

import com.xlh.dto.PageDTO;
import com.xlh.dto.system.OperationDTO;
import com.xlh.dto.system.OperationUserDTO;
import com.xlh.enums.user.EventCodeEnum;
import com.xlh.pojo.system.Operation;

import java.util.List;

/**
 * 日志
 * <p>
 * Created by lx on 2019/1/28.
 */
public interface OperationService {

    /**
     * 根据参数中信息 获取日志信息
     *
     * @param userId        用户id
     * @param objIds        对象id集合
     * @param eventCodeEnum 事件码制
     * @return
     */
    List<Operation> listOperation(Long userId, List<Long> objIds, EventCodeEnum eventCodeEnum);

    /**
     * 获取日志
     *
     * @param userIds       用户id集合
     * @param objIds        对象id集合
     * @param eventCodeEnum 事件码值
     * @return
     */
    List<Operation> listOperation(List<Long> userIds, List<Long> objIds, EventCodeEnum eventCodeEnum);

    /**
     * 根据参数中信息 获取日志信息
     *
     * @param userId        用户id
     * @param objIds        对象id集合
     * @param eventCodeEnum 事件码制
     * @return
     */
    List<Long> queryOperationIds(Long userId, List<Long> objIds, EventCodeEnum eventCodeEnum);

    /**
     * 获取流水分页
     *
     * @param pageNum        页数
     * @param pageSize       每页显示条数
     * @param userInfo       用户信息
     * @param roleName       角色名称
     * @param schoolName     学校名称
     * @param startTime      开始时段
     * @param endTime        结束时段
     * @param eventCodeEnums 事件枚举
     * @return
     */
    PageDTO<OperationUserDTO> listOperationByPage(Integer pageNum, Integer pageSize, String userInfo, String roleName,
                                                  String schoolName, String startTime, String endTime,
                                                  List<EventCodeEnum> eventCodeEnums);

    /**
     * 批量删除流水
     *
     * @param operationIds 流水id集合
     */
    void batchDeleteOperation(List<Long> operationIds);

    /**
     * 批量删除流水
     *
     * @param objIds        对象id集合
     * @param userIds       用户id集合
     * @param eventCodeEnum 事件枚举
     */
    void batchDeleteOperation(List<Long> objIds, List<Long> userIds, EventCodeEnum eventCodeEnum);

    /**
     * 获取章节最近学习记录
     *
     * @param userId   用户id
     * @param courseId 课程id
     * @return
     */
    OperationDTO getChapterRecording(Long userId, Long courseId);

    /**
     * 插入流水表
     *
     * @param ip
     * @param eventCodeEnum 事件类型枚举
     * @param objId         对象id
     * @return
     */
    Operation insertOpertion(String ip, EventCodeEnum eventCodeEnum, Long objId);

    /**
     * 批量添加
     *
     * @param operations 参数
     */
    void insertBatch(List<Operation> operations);

    /**
     * 修改流水额外表
     *
     * @param operationId 额外表id
     */
    boolean updateOperationExtend(Long operationId);

    /**
     * 导出excel格式
     *
     * @param userInfo       用户信息
     * @param roleName       角色名称
     * @param schoolName     学校名称
     * @param startTime      开始时段
     * @param endTime        结束时段
     * @param eventCodeEnums 事件码值
     */
    void exportExcel(String userInfo, String roleName, String schoolName, String startTime, String endTime,
                     List<EventCodeEnum> eventCodeEnums);

}
